/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package demo;

import br.unesp.rc.locadora.beans.Acesso;
import br.unesp.rc.locadora.beans.Contato;
import br.unesp.rc.locadora.beans.Endereco;
import br.unesp.rc.locadora.beans.Fisica;
import java.io.*;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author aluno
 */
public class Main {

    public static void main(String[] args) {
        File arq = new File("C:\\results.txt");
        
        if (arq.exists()) {
            System.out.println("Arquivo já existente");
        } else {
            try {
                arq.createNewFile();
                System.out.println("Arquivo criado");
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        try {
            FileWriter fw = new FileWriter(arq);
            PrintWriter pw = new PrintWriter(fw);
            long tf,ti;
            double tt;
            int i;
            long iAcesso=0;
            StringBuffer sb = new StringBuffer();
            
            br.unesp.rc.locadora.dao.FisicaDAO fdao = new br.unesp.rc.locadora.dao.FisicaDAOImpl();
            br.unesp.rc.locadora.dao.hibernate.FisicaDAO fhdao = new br.unesp.rc.locadora.dao.hibernate.FisicaDAOImpl();
            
            Fisica f = new Fisica();
            f.setCpf(123456789);
            f.setNome("Harry a");
            f.setDataNascimento(new Date());

            Contato c = new Contato("3333-4444", "harry@a.com");
            f.setContato(c);

            Endereco e = new Endereco("Rua 24A", 
                    1515, 
                    "Bela Vista", 
                    "13575-090", "Rio Claro", "SP");
            f.setEndereco(e);
            
            System.out.println("Iniciando Teste 1");
            sb.append("Teste 1: Inclusão de 100 registros - JDBC");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 100; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fdao.cadastrar(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 1");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 2");
            sb.append("Teste 2: Inclusão de 1000 registros - JDBC");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 1000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fdao.cadastrar(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 2");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 3");
            sb.append("Teste 3: Inclusão de 10000 registros - JDBC");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 10000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fdao.cadastrar(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 3");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 4");
            sb.append("Teste 4: Inclusão de 100 registros - Hibernate");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 100; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fhdao.cadastrar(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 4");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 5");
            sb.append("Teste 5: Inclusão de 1000 registros - Hibernate");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 1000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fhdao.cadastrar(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 5");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 6");
            sb.append("Teste 6: Inclusão de 10000 registros - Hibernate");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 10000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fhdao.cadastrar(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 6");
            
            pw.write(sb.toString());
            
            System.out.println("Iniciando Teste 7");
            sb.append("Teste 7: Inclusão de 100 registros - Procedures JDBC");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 100; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fdao.cadastrarProc(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 7");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 8");
            sb.append("Teste 8: Inclusão de 1000 registros - Procedures JDBC");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 1000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fdao.cadastrarProc(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 8");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 9");
            sb.append("Teste 9: Inclusão de 10000 registros - Procedures JDBC");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 10000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fdao.cadastrarProc(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 9");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 10");
            sb.append("Teste 10: Inclusão de 100 registros - Procedures Hibernate");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 100; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fhdao.cadastrarProc(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 10");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 11");
            sb.append("Teste 11: Inclusão de 1000 registros - Procedures Hibernate");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 1000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fhdao.cadastrarProc(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 11");
            
            pw.write(sb.toString());
            
            sb = new StringBuffer();
            
            System.out.println("Iniciando Teste 12");
            sb.append("Teste 12: Inclusão de 10000 registros - Procedures Hibernate");
            sb.append(System.getProperty("line.separator"));
            ti = System.nanoTime();
            for(i = 0; i < 10000; i++){
                Acesso a = new Acesso("a"+iAcesso, "a"+iAcesso);
                iAcesso++;
                f.setAcesso(a);
                fhdao.cadastrarProc(f);
                //sb.append(iAcesso);
                //sb.append(System.getProperty("line.separator"));
            }
            tf = System.nanoTime();
            
            sb.append("Tempo do teste: ");
            tt = (tf-ti)/1000000000;
            sb.append(tt);
            sb.append(" segundos");
            sb.append(System.getProperty("line.separator"));
            System.out.println("Finalizando Teste 12");
            
            pw.write(sb.toString());
            
            pw.close();
            fw.close();
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
